/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.rm.beans;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.context.FacesContext;
import org.rm.entidades.ExperienciaBase;
import org.rm.entidades.jpa.JpaExperiencia;
import org.rm.entidades.jpa.exceptions.NonexistentEntityException;

/**
 *
 * @author ffbeltran
 */
public class ControladorExperiencia {

    private ControladorBeans controlador;

    public ControladorBeans getControlador() {
        return controlador;
    }

    public void setControlador(ControladorBeans controlador) {
        this.controlador = controlador;
    }

    public String modificaExperiencia() {
        Integer id = Integer.valueOf(ControladorUtil.getParam("id"));
        String name = ControladorUtil.getParam("experiencia");
        Class clazz = ControladorUtil.getEntidad(name);
        ExperienciaBase antiguo = null;
        ExperienciaBase nuevo = null;
        List experiencias = controlador.getListaExperiencia(name);
        for (Iterator it = experiencias.iterator(); it.hasNext();) {
            nuevo = (ExperienciaBase) it.next();
            if (nuevo.getId().equals(id)) {
                try {
                    antiguo = JpaExperiencia.findExperienciaBase(clazz, id);
                    antiguo.setExp(antiguo.getExp() * -1);
                    nuevo.actualizaExp();
                    JpaExperiencia.edit(nuevo);
                    controlador.setListaExperiencia(name,
                            JpaExperiencia.findExperienciaBaseEntities(clazz, controlador.getIdPartida()));
                    List<ExperienciaBase> expList = new ArrayList<ExperienciaBase>();
                    expList.add(antiguo);
                    expList.add(nuevo);
                    controlador.calculaExperiencia(expList);
                } catch (NonexistentEntityException ex) {
                    ex.printStackTrace();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                break;
            }
        }
        return null;
    }

    public String eliminaExperiencia() {
        Integer id = Integer.valueOf(ControladorUtil.getParam("id"));
        String name = ControladorUtil.getParam("experiencia");
        Class clazz = ControladorUtil.getEntidad(name);
        ExperienciaBase exp = JpaExperiencia.findExperienciaBase(clazz, id);
        if (exp != null) {
            exp.actualizaExp();
            exp.setExp(exp.getExp() * -1);
        }
        try {
            JpaExperiencia.destroy(clazz, id);
            controlador.setListaExperiencia(name,
                    JpaExperiencia.findExperienciaBaseEntities(clazz, controlador.getIdPartida()));
            controlador.calculaExperiencia(exp);
        } catch (NonexistentEntityException ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public String nuevaExperiencia() {
        String name = ControladorUtil.getParam("experiencia");
        Class clazz = ControladorUtil.getEntidad(name);
        ExperienciaBase exp = controlador.getEntidadesBase().get(name);
        exp.setId(null);
        exp.setIdPartida(controlador.getIdPartida());
        exp.actualizaExp();
        JpaExperiencia.create(exp);
        controlador.setListaExperiencia(name,
                JpaExperiencia.findExperienciaBaseEntities(clazz, controlador.getIdPartida()));
        controlador.calculaExperiencia(exp);
        return null;
    }
}
